package config

import (
	"encoding/json"
	"fmt"
	"io/ioutil"
	"net"
)

// 模块 数据结构
// 解析配置文件 module.json
type module struct {
	Name   string   `json:"name"`
	Port   int      `json:"port"`
	Host   string   `json:"host"`
	Title  string   `json:"title"`
	Prefix string   `json:"prefix"`
	Hosts  []string `json:"-"`
}

var CurrentModule *module

// 调用: GetModule("module.json")
func GetModule(path string) (err error) {
	CurrentModule = new(module)

	content, err := ioutil.ReadFile(path)
	if err != nil {
		return err
	}

	err = json.Unmarshal(content, CurrentModule)
	if err != nil {
		return err
	}

	if CurrentModule.Host == "auto" {
		addrs, err := net.InterfaceAddrs()
		if err != nil {
			return err
		}
		for _, address := range addrs {
			if ipnet, ok := address.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
				if ipnet.IP.To4() != nil {
					CurrentModule.Hosts = append(
						CurrentModule.Hosts,
						fmt.Sprintf("%s:%d", ipnet.IP.String(), CurrentModule.Port))
				}
			}
		}
	} else {
		CurrentModule.Hosts = append(
			CurrentModule.Hosts,
			fmt.Sprintf("%s:%d", CurrentModule.Host, CurrentModule.Port))
	}
	return nil
}
